#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <iostream>
volatile int gval = 100; // 全局变量共享  函数共享  原则上，堆空间也共享（拿到申请的地址后）

class Task
{
public:
    Task()
    {
    }
    Task(int x, int y) : _x(x), _y(y), _result(0), _code(0)
    {
    }
    void Div()
    {
        if (_y == 0)
        {
            _code = 1; // 除0错误
            return;
        }
        _result = _x / _y;
    }
    void Print()
    {
        std::cout << "result : " << _result << "[" << _code << "]" << std::endl;
    }

private:
    int _x;
    int _y;
    int _result;
    int _code;
};

void *rout(void *arg)
{
    // int i;
    // for (;;)
    // {
    //     printf("I'am thread 1\n");
    //     sleep(1);
    //     break;
    // }
    Task *t = static_cast<Task *>(arg);
    t->Div();

    return t;
}
int main(void)
{
    pthread_t tid; // 线程控制块的起始地址
    int ret;
    Task *t = new Task(20, 0);
    if ((ret = pthread_create(&tid, NULL, rout, t)) != 0)
    {
        fprintf(stderr, "pthread_create : %s\n", strerror(ret));
        exit(EXIT_FAILURE);
    }
    int i;
    void *r = nullptr;
    pthread_join(tid, &r);
    Task *res = (Task *)r;
    res->Print();
    // printf("%d\n", (long long int)r);
    // for (;;)
    // {
    //     printf("I'am main thread\n");
    //     sleep(1);
    // }
    return 0;
}